unit uERP_Controller_Contador;

interface

uses uERP_Contador, uERP_DAO, uErro;

type
  TControllerContador = class

    {$REGION '<< Private >>'}

      private

        {$REGION '<< Methods >>'}

          function Recover(const a_Objeto: TContador): TContador; overload;

        {$ENDREGION}

    {$ENDREGION}

    {$REGION '<< Public >>'}

      public

        {$REGION '<< Methods >>'}

          function GetNextID(): Int64;

          function Exists(const a_Codigo: String; const a_ID: Int64): Boolean;

          function Recover(const a_Codigo: String): TContador; overload;
          function Recover(const a_ID: Int64): TContador; overload;

        {$ENDREGION}

    {$ENDREGION}

  end;

implementation

uses
  SysUtils, uERP_Constantes, uMensagens, Windows;

{$REGION '<< TControllerContador >>'}

function TControllerContador.GetNextID: Int64;
begin
  Result := TDAO.GetInstance().GetDAOContador().GetNextID();
end;

function TControllerContador.Exists(const a_Codigo: String; const a_ID: Int64): Boolean;
var
  t_Contador: TContador;
begin
  Result := False;
  t_Contador := nil;
  try
    t_Contador := Self.Recover(a_Codigo);
    if Assigned(t_Contador)
      then Result := t_Contador.ID <> a_ID;
  finally
    FreeAndNil(t_Contador);
  end;
end;

function TControllerContador.Recover(const a_Objeto: TContador): TContador;
begin
  Result := TDAO.GetInstance().GetDAOContador().Recover(a_Objeto);
end;

function TControllerContador.Recover(const a_Codigo: String): TContador;
var
  t_Contador: TContador;
begin
  t_Contador := TContador.Create();
  try
    t_Contador.Codigo := a_Codigo;
    Result := Self.Recover(t_Contador);
  finally
    FreeAndNil(t_Contador);
  end;
end;

function TControllerContador.Recover(const a_ID: Int64): TContador;
var
  t_Contador: TContador;
begin
  t_Contador := TContador.Create();
  try
    t_Contador.ID := a_ID;
    Result := Self.Recover(t_Contador);
  finally
    FreeAndNil(t_Contador);
  end;
end;

{$ENDREGION}

end.
